#ifndef __COMMON_HPP__
#define __COMMON_HPP__

#include <iostream>
#include <fstream>
#include <ctime>
#include <sys/stat.h>
#include <unistd.h>
#include <cstddef>

namespace MyLog
{
    void PrintError(const std::string &ErrorMessage)
    {
        std::cout<<ErrorMessage<<std::endl;
    }
    namespace Common
    {
        class Date
        {
            public:
                //不需要进行对象的操作，设置为静态成员访问更方便       
                //获取当前时间戳  
                static size_t GetNowTimeStamp()
                {
                    return (size_t)time(nullptr);
                } 
        };
        class File
        {
            public:
                static bool Exists(const std::string& FileName)
                {
                    //stat系统调用，用于获取当前文件或目录的信息
                    struct stat st;
                    return stat(FileName.c_str(),&st)==0;
                }
                // FilePath[0]不能是路径分隔符，mkdir时不会被识别
                static std::string GetRalativePath(const std::string& FilePath)
                {
                    //传入参数 ./a/b/1.txt
                    //返回 ./a/b/
                    if(FilePath.empty())return ".";
                    size_t pos=FilePath.find_last_of("/\\");
                    if(pos==std::string::npos)return ".";
                    return FilePath.substr(0,pos+1);
                }
                static void CreateDirectory(const std::string& Path)
                {
                    if(Path.empty()||Exists(Path))return;
                    size_t pos,index=0;
                    //使用循环判断是为了创建多级目录  a/b/v
                    while(index<Path.size())
                    {
                        pos=Path.find_first_of("/\\",index);
                        if(pos==std::string::npos)
                        {
                            mkdir(Path.c_str(),0755);
                            return;
                        }

                        if(pos==index)
                        {
                            index=pos+1;
                            continue;
                        }

                        std::string subdir=Path.substr(0,pos);
                        if(subdir=="."||subdir==".."||Exists(Path))
                        {
                            index=pos+1;
                            continue;
                        }
                        mkdir(subdir.c_str(),0755);
                        index=pos+1;
                    }
                }
        };
    }
}
#endif